// axios基础封装
import axios from 'axios'
import { getData } from './ls'
// 不挑项目 + 定义化

// 1. 实例化  axios + baseURL + timeout = instance[项目中要使用的请求实例对象]
// create方法可以执行多次 进行多个实例的生成 每个实例都可以有自己不同的配置

const instance = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 5000
})

// 2. 请求拦截
// 发送请求之前 对请求参数做处理
instance.interceptors.request.use(config => {
  // config做一些定制化 添加token
  // 获取token数据
  // 加入到请求头中按照后端要求的格式
  // 登录接口调用的时候 如果这个时候取值 就会出现null.token的问题
  // 加一个可选链 只有getData('rabbit-profile') 有值的时候才去.token 不会报错了
  const token = getData('rabbit-profile')?.token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, e => Promise.reject(e))

instance.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    return Promise.reject(error)
  }
)

function request (url, method, reqData) {
  // 做什么事儿
  return instance({
    url,
    method,
    // 如何适配一个对象的key get -> params post -> data
    [method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
  })
}

export default request
